package trabalho1;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;


public class Consultar {     
    
    private final Preco[] precos;
    private final Venda[] vendas;
    private final Vendedor[] vendedores;

    public Consultar(LerDat lerDat) {
        
        precos = lerDat.getPrecos();
        vendas = lerDat.getVendas();
        vendedores = lerDat.getVendedores();        
    }
    
    private boolean ehIgualMesAnoEscolhidos(String dataEscolhida, 
            String dataVenda){
        
        // elementos da data = ano, mês ou ano.
        
        String[] elementosDataEscolhida = dataEscolhida.split("/");
        String[] elementosDataVenda = dataVenda.split("/");
        
        return elementosDataEscolhida[1].equals(elementosDataVenda[1]) &&
                elementosDataEscolhida[2].equals(elementosDataVenda[2]);
                
    }
    
    private boolean estaDentroDessePeriodo(String dataEscolhidaInicial, 
            String dataEscolhidaFinal, String dataVenda) throws ParseException{
        
        Date data = new SimpleDateFormat("dd/MM/yyyy").parse(dataVenda);
        Date dataInicial = new SimpleDateFormat("dd/MM/yyyy").parse(dataEscolhidaInicial);
        Date dataFinal = new SimpleDateFormat("dd/MM/yyyy").parse(dataEscolhidaFinal);        
        
        return (data.before(dataFinal) && data.after(dataInicial));
        
    }
    
    public void totalVendasVendedorPorMes(String dataEscolhida){
        double precoDoProduto;
        int quantidadeDoProduto;
        double valorTotalVendidoDoProduto;
        double somaDosPrecosDosProdutos = 0;
        
        for(int i=0; i<vendas.length; i++)
            for(int j=0; j<precos.length;j++)                
                if(vendas[i].getCodigoProduto().equals(precos[j].getCodigoProduto()))     
                    if(ehIgualMesAnoEscolhidos(vendas[i].getDataVenda(), dataEscolhida)){
                        
                        System.out.println("Data de venda: " + vendas[i].getDataVenda());
                        System.out.println("Data escolhida: " + dataEscolhida);
                        System.out.println("Código do produto: " + vendas[i].getCodigoProduto());
                        
                        precoDoProduto = Double.parseDouble(precos[j].getPrecoProduto());
                        quantidadeDoProduto = Integer.parseInt(vendas[i].getQuantVendidaProduto());

                        valorTotalVendidoDoProduto = precoDoProduto * quantidadeDoProduto;                  
                        somaDosPrecosDosProdutos += precoDoProduto; 

                        acrescentarTotalDeVendas(vendas[i].getCodigoVendedor(), valorTotalVendidoDoProduto);
                        acrescentarMediaDeVendas(vendas[i].getCodigoVendedor(), precos.length, somaDosPrecosDosProdutos);
                    }
        
    }

    public void calcular(){
        double precoDoProduto;
        int quantidadeDoProduto;
        double valorTotalVendidoDoProduto;
        double somaDosPrecosDosProdutos = 0;
 
        for(int i=0; i<vendas.length; i++)
            for(int j=0; j<precos.length;j++)                
                if(vendas[i].getCodigoProduto().equals(precos[j].getCodigoProduto()))
//                    if(ehIgualDataEscolhida(vendas[i].getDataVenda(), "00/07/2013"))
                    {  
                    
                        precoDoProduto = Double.parseDouble(precos[j].getPrecoProduto());
                        quantidadeDoProduto = Integer.parseInt(vendas[i].getQuantVendidaProduto());

                        valorTotalVendidoDoProduto = precoDoProduto * quantidadeDoProduto;                  
                        somaDosPrecosDosProdutos += precoDoProduto; 

                        acrescentarTotalDeVendas(vendas[i].getCodigoVendedor(), valorTotalVendidoDoProduto);
                        acrescentarMediaDeVendas(vendas[i].getCodigoVendedor(), precos.length, somaDosPrecosDosProdutos);
                    }        
    }
    
    private void acrescentarTotalDeVendas(String codigoVendedor, double valor){         
        for(int i=0; i<vendedores.length; i++)       
            if(Double.parseDouble(vendedores[i].getCodigoVendedor()) == Double.parseDouble(codigoVendedor))              
                vendedores[i].acrescentarTotalDeVendas(valor);                  
    }
    
    private void acrescentarMediaDeVendas(String codigoVendedor, int qtdeTotalDeProdutos, double somaDosPrecosDosProdutos){         
        for(int i=0; i<vendedores.length; i++)       
            if(Double.parseDouble(vendedores[i].getCodigoVendedor()) == Double.parseDouble(codigoVendedor))              
                vendedores[i].acrescentarMediaDeVendas(qtdeTotalDeProdutos, somaDosPrecosDosProdutos);
    }
    
    public void imprimir() {
        Comissao c = new Comissao();
        
        for(Vendedor v : vendedores){
            System.out.print("Código: " + v.getCodigoVendedor());
            System.out.print("  Venda Total: " + v.getTotalDeVendas());
            System.out.println("  Média de Vendas: " + v.getMediaDeVendas());
            System.out.print("   Categoria: " + v.getCategoriaVendedor());
            System.out.println("   Comissão: " + c.obterComissao
                    (Double.parseDouble(v.getCategoriaVendedor()), v.getTotalDeVendas()));
        } 
    }
}